package com.dev.toolkit.common.util;

import cn.hutool.core.util.StrUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author ZhuYouBin
 * @version 1.0.0
 * @date 2024/4/28 14:42
 * @description 字符串工具类
 */
public class StrUtil2 extends StrUtil {
    public static String getOrDefault(String str, String defaultStr) {
        return StrUtil.isBlank(str) ? defaultStr : str;
    }

    /**
     * 从 url 连接中获取数据库名称
     *
     * @param url 数据量连接地址
     */
    public static String getDataBaseName(String url) {
        Matcher matcher = Pattern.compile("jdbc:mysql://[^/]+/([^?]+)").matcher(url);
        return matcher.find() ? matcher.group(1) : "";
    }

    /**
     * 去除前缀、后缀，根据下划线获取Java类名称
     */
    public static String getJavaClassName(String name, String prefix, String suffix) {
        name = name.toLowerCase();
        prefix = prefix == null ? "" : prefix.trim().toLowerCase();
        if (name.startsWith(prefix)) {
            name = name.substring(prefix.length());
        }
        suffix = suffix == null ? "" : suffix.trim().toLowerCase();
        if (name.endsWith(suffix)) {
            name = name.substring(0, name.length() - suffix.length());
        }
        StringBuilder sb = new StringBuilder();
        String[] split = name.split("_");
        for (String s : split) {
            sb.append(s.substring(0, 1).toUpperCase()).append(s.substring(1));
        }
        return sb.toString();
    }

    /**
     * 根据下划线，获取字段属性名称
     */
    public static String getFieldName(String name) {
        StringBuilder sb = new StringBuilder();
        String[] split = name.split("_");
        for (String s : split) {
            sb.append(s.substring(0, 1).toUpperCase()).append(s.substring(1).toLowerCase());
        }
        return firstCharToLowerCase(sb.toString());
    }

    /**
     * 首字母小写
     */
    public static String firstCharToLowerCase(String str) {
        char firstChar = str.charAt(0);
        if (firstChar >= 'A' && firstChar <= 'Z') {
            char[] arr = str.toCharArray();
            arr[0] += ('a' - 'A');
            return new String(arr);
        }
        return str;
    }

    public static String ifEmptyToDefault(String str, String defaultStr) {
        return StrUtil.isBlank(str) ? defaultStr : str;
    }
}